//
//  "$Id: Monitor.h 53767 2012-03-12 11:16:39Z wang_haifeng $"
//
//  Copyright (c)1992-2009, ZheJiang Dahua Technology Stock CO.LTD.
//  All Rights Reserved.
//
//	Description:	监视器接口
//	Revisions:		Year-Month-Day  SVN-Author  Modification
//

#ifndef __MONITOR_API_H__
#define __MONITOR_API_H__

#include "Types.h"
#include "Defs.h"

#ifdef __cplusplus
extern "C" {
#endif

/// \defgroup VideoOutAPI API Monitor
/// 监视器控制接口
///	\n 调用流程图:
/// \code
///    =================================
///                  |                            
///             createMonitor
///                  |
///               addRef
///                  |
///               getCaps
///                	 |/--------------+
///                  |				 |
///          getPowerKeyState        |
///                  |               |
///		       setPowerMode          |
///                  |               |
///		       getPowerMode          |
///               	 |               |
///                  |\--------------+
///	                 |
///                	 |/--------------+
///                  |				 |
///              operateOSD		     |
///               	 |               |
///                  |\--------------+
///             release
///	                 |
///                  |                            
///    =================================
/// \endcode
/// @{

/// 视频输出OSD操作
typedef enum MonitorOSDOperation
{
	monitorOSDMenu = 0,		///< 菜单
	monitorOSDUp,			///< 上
	monitorOSDDown,			///< 下
	monitorOSDLeft,			///< 左
	monitorOSDRight,		///< 右
	monitorOSDOK,			///< 确认
	monitorOSDCancel		///< 取消
} MonitorOSDOperation;

/// 监视器特性结构，128字节
typedef struct MonitorCaps
{
	char	powerMode;			///< 是否支持电源控制，0-不支持，1-支持	
	char	osdOperate;			///< 是否支持OSD控制，0-不支持，1-支持	
	char	backLight;			///< 是否支持背光控制，0-不支持，n-支持的背光等级
	char	reservedBytes[1];	///< 保留字节
	int		reserved[31];		///< 保留字节
}MonitorCaps;

/// Monitor接口，520字节
typedef struct Monitor
{
	/// 底层私有数据
	void *priv;


	/// 增加接口引用
	///
	/// \param [in] thiz 监视器接口指针
	/// \retval 0 成功
	/// \retval <0 失败
	int (*addRef)(struct Monitor *thiz);


	/// 释放接口
	///
	/// \param [in] thiz 监视器接口
	/// \retval 0 成功
	/// \retval <0失败
	int (*release)(struct Monitor *thiz);


	/// 获取监视器能力
	///
	/// \param [in] thiz 监视器接口指针
	/// \param [out] caps 监视器特性结构MonitorCaps指针
	/// \retval 0 成功
	/// \retval <0 失败
	int (*getCaps)(struct Monitor *thiz, MonitorCaps *caps);


	/// 监视器电源控制
	///
	/// \param [in] thiz 监视器接口指针
	/// \param [in] state 电源操作，0-关闭电源，1-打开电源
	/// \retval 0 成功
	/// \retval <0 失败
	int (*setPowerMode)(struct Monitor *thiz, int state);


	/// 获取监视器电源状态
	///
	/// \param [in] thiz 监视器接口指针
	/// \param[out] state 监视器电源状态，0-关闭，1-打开
	/// \retval 0 成功
	/// \retval <0 失败
	int (*getPowerMode)(struct Monitor *thiz, int *state);


	/// 监视器OSD操作
	///
	/// \param [in] thiz 监视器接口指针
	/// \param [in] operation OSD操作
	/// \retval 0 成功
	/// \retval <0失败
	int (*operateOSD)(struct Monitor *thiz, MonitorOSDOperation operation);


	/// 监视器背光控制
	///
	/// \param [in] thiz 监视器接口指针
	/// \param [in] state 电源操作，0-关闭背光，1..(n-1)-设置背光等级
	/// \retval 0 成功
	/// \retval <0 失败
	int (*setBackLightLevel)(struct Monitor *thiz, int level);


	/// 获取监视器电源按键状态
	///
	/// \param [in] thiz 监视器接口指针
	/// \param[out] state 监视器电源按键状态，0-弹起，1-按下
	/// \retval 0 成功
	/// \retval <0 失败
	int (*getPowerKeyState)(struct Monitor *thiz, int *state);


	/// 保留字节
	void* reserved[121];				///< 保留字节
}Monitor;

/// 监视器描述结构，128字节
typedef struct MonitorDesc
{
	char	port;				///< 监视器编号
	int		reserved[31];		///< 保留字节
}MonitorDesc;


/// 创建监视器接口
///
/// \param [in] desc 监视器描述结构MonitorDesc指针
/// \param [out] monitor 监视器接口指针的指针
/// \retval 0成功
/// \retval <0失败
int PAL_API createMonitor(MonitorDesc *desc, Monitor **monitor);

/// 获取监视器数量
///
/// \retval 监视器数量
int PAL_API getMonitorCount(void);

/// @} end of group
#ifdef __cplusplus
}
#endif

#endif //__MONITOR_API_H__

